from hopfield import *
from generadores import *
from rn_utils import *

def ej1(net, C):

	# Veo a que convergen las memorias
	
	f = open('resultados/ej1/memorias.out','w')
	
	for i in range(len(C)):
		p = C[i]
		e,s = net.Evaluar(p,False)
		f.write('memoria['+str(i)+']: ' + ArrayToBinary(p)+'\n')
		f.write('estado:     ' + ArrayToBinary(s)+'\n\n')
		#f.write('el estado es una memoria: ' + str(pertenece(s,conjunto_ortogonales))+'\n')
	f.close()
	
	# Veo a que convergen patrones parecidos a las memorias
	
	random.seed(SEED)
	f = open('resultados/ej1/pseudo_memorias.out','w')
	
	for p in C:
		sim = generarSimilares(p,2,32)
		for pp in sim:
			e,s = net.Evaluar(pp,False)
			f.write('memoria['+str(i)+']:     ' + ArrayToBinary(p) + '\n')
			f.write('patron similar: ' + ArrayToBinary(pp) + '\n')
			f.write('estado:         ' + ArrayToBinary(s) + '\n')
			f.write('el estado es una memoria: ' + str(pertenece(s,C)) + '\n\n')
	f.close()
	
	# Veo a que convergen patrones parecidos entre si

	random.seed(SEED)
	f = open('resultados/ej1/parecidos.out','w')

	p = generarAleatorios(1)[0]
	similares = generarSimilares(p,10,16)
	f.write('patron original: ' + ArrayToBinary(p) + '\n')
	for i in range(len(similares)):
		p = similares[i]
		e,s = net.Evaluar(p,False)
		f.write('patron similar: ' + ArrayToBinary(p) + '\n')
		f.write('estado:         ' + ArrayToBinary(s) + '\n')
	f.close()
